#include "RR.h"
#include <stdio.h>
#include <stdlib.h>

/**
 * 函数: calculateTimes
 * 功能: 根据时间片轮转调度算法计算每个进程的完成时间、周转时间和等待时间
 *
 * 参数:
 *  - processes: 指向包含多个进程信息的数组
 *  - n: 进程数量
 *  - time_slice: 时间片长度
 *
 * 描述:
 *  计算进程的完成时间，周转时间和等待时间并存在结构体中即可
 */
void
calculateTimes (Process *processes, int n, int time_slice)
{
  // TODO
  int current_time = 0;
  int remaining_processes = n;

  while (remaining_processes > 0)
    {
      for (int i = 0; i < n && remaining_processes > 0; i++)
        {
          Process *p = &processes[i];
          if (p->remaining_time <= 0)
            continue;

          int time_used = (p->remaining_time > time_slice) ? time_slice
                                                           : p->remaining_time;
          current_time += time_used;
          p->remaining_time -= time_used;

          if (p->remaining_time == 0)
            {
              p->completion_time = current_time;
              p->turnaround_time = current_time - p->arrival_time;
              p->waiting_time = p->turnaround_time - p->burst_time;
              remaining_processes--;
            }
        }
    }
}
